home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Gold Collection
/
Software Vault - The Gold Collection (American Databankers) (1993).ISO
/
cdr48
/
vdl020d.zip
/
VFORMNEW.DOC
< prev
next >
Wrap
Text File
|
1993-04-14
|
20KB
|
560 lines
{
═══════════════════════════════════════════════════════════════════════════
Visionix Win/User Interface "Forms" Unit (VFORM)
Copyright 1991,92,93 Visionix
ALL RIGHTS RESERVED
Form Tool Library. It makes it possible to automatically create and use
a Form for Data Input.
───────────────────────────────────────────────────────────────────────────
Revision history in reverse chronological order:
Initials Date Comment
-------- -------- -------------------------------------------------------
jrt 03/15/93 Completely rewritten. Switched to CUA style
control keys; change set "pointer" method to new
method that uses SetBegin/SetEnd nodes; changed
all node info structures; added support for
list-boxes, etc. etc.
TODO: Mouse support, hotkey support, support for
being called in event mode.
lpg 03/06/93 Fixed bug with WTextMask Node. Needed GotoXY()
mep 02/11/93 Cleaned up code for beta release
jrt 02/08/93 Sync with beta 0.12 release
jrt 12/07/92 Sync with beta 0.11 release
jrt 11/21/92 Sync with beta 0.08
lpg 10/05/92 Added Support for Float, TxtMask, & NumMask nodes.
Increased Node Info Size to 16 Bytes
jrt 09/01/92 First logged revision.
jrt ??/??/91 Fixed FNT_RadioB fields so they are no longer
hardcoded to white on blue
jrt ??/??/91 Fixed FNT_Opt fields handling of <ESC>
═══════════════════════════════════════════════════════════════════════════
}
Unit VFormNew;
Uses
VTypes,
VIn,
VWinlow,
VWinhigh,
VGen,
VCrt,
DOS;
{────────────────────────────────────────────────────────────────────────────}
{-----------------}
{ Form Node Types }
{-----------------}
Const
FNT_Master = 0; { Master Node }
FNT_FormBegin = 1; { FormBegin node }
FNT_FormEnd = 2; { FormEnd node }
FNT_SetBegin = 3; { SetBegin node }
FNT_SetEnd = 4; { SetEnd node }
FNT_Text = 5; { read text node }
FNT_Num = 6; { read num node }
FNT_XBox = 7; { check box node }
FNT_Opt = 8; { readopt field node }
FNT_Proc = 9; { vendor procedure node }
FNT_Header = 10; { text header node }
FNT_Button = 11; { push button node }
FNT_RadioB = 12; { radio button node }
FNT_Hex = 13; { hex node }
FNT_Float = 14; { read float node }
FNT_TMask = 15; { read TxtMask node }
FNT_NMask = 16; { read NumMask node }
FNT_List = 17; { list-box/menu node }
{------------------}
{ FNT_Proc Actions }
{------------------}
Const
FPA_Draw = 1;
FPA_Read = 2;
{-----------------------------}
{ form retcode/ status values }
{-----------------------------}
Const
fsNone = 0;
fsEscape = 1;
fsEnter = 2;
fsEvent = 3;
{----------------------------------------}
{ Form procedure node types and messages }
{----------------------------------------}
Type
TFormNodeProc = PROCEDURE( Msg : LONGINT;
FM : POINTER;
Node : BYTE );
Const
fnpmDraw = 1;
fnpmRead = 2;
{-------------------------------}
{ Form node Information records }
{-------------------------------}
Type
FNI_Master = RECORD
NumAlloced : BYTE;
NumUsed : BYTE;
SaveSetDepth : BYTE;
SaveTabbing : BOOLEAN;
SaveGoingDown: BOOLEAN;
SaveLastNode : BYTE;
END;
FNI_FormBegin = RECORD
F : Array[1..4] of INTEGER;
B : Array[1..4] of INTEGER;
END;
FNI_FormEnd = RECORD
zzz : BYTE;
END;
FNI_SetBegin = RECORD
zzz : BYTE;
END;
FNI_SetEnd = RECORD
zzz : BYTE;
END;
FNI_Text = RECORD
Ptr : POINTER;
Str : ST80;
Length : BYTE;
END;
FNI_Header = RECORD
Ptr : POINTER;
Str : ST80;
END;
FNI_Num = RECORD
Val : LONGINT;
Length : BYTE;
END;
FNI_XBox = RECORD
Setting : BOOLEAN;
END;
FNI_Button = RECORD
Ptr : POINTER;
BType : BYTE;
Str : ST80;
RetCode : INTEGER;
END;
FNI_RadioB = RECORD
Setting : BOOLEAN;
END;
FNI_Opt = RECORD
Ptr : Pointer;
NumChoices : BYTE;
CurChoice : INTEGER;
END;
FNI_Hex = RECORD
Val : LONGINT;
Length : BYTE;
END;
FNI_Proc = RECORD
ThePRoc : TFormNodeProc;
Action : BYTE;
ProcWidth : BYTE;
ProcHeight : BYTE;
S : ST80;
END;
FNI_Float = RECORD {8 bytes}
Val : REAL; {6 bytes}
Width : BYTE;
Decimal : BYTE;
END;
FNI_TMask = RECORD {13 bytes - 5 too many!}
Mask : POINTER;
Keys : POINTER;
Fill : CHAR;
LJust : BOOLEAN;
Ptr : POINTER;
Str : ST80;
END;
FNI_NMask = RECORD {8 bytes}
Mask : POINTER;
Val : LONGINT;
END;
FNI_List = RECORD
Ptr : POINTER;
NumChoices : BYTE;
Cols : BYTE;
Rows : BYTE;
Frame : INTEGER;
CurChoice : INTEGER;
Keys : ST80;
END;
{-------------------------------}
{ All-inclusive formnode record }
{-------------------------------}
Type
TFormNode = RECORD
T : WORD; { type }
Awake : BOOLEAN;
Parent : BYTE;
X : BYTE; { x location }
Y : BYTE; { Y locatio }
F : INTEGER; { fore }
B : INTEGER; { back }
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Case Word Of
FNT_Master : (Master : FNI_Master);
FNT_FormBegin : (FormBegin : FNI_FormBegin);
FNT_FormEnd : (FormEnd : FNI_FormEnd);
FNT_SetBegin : (SetBegin : FNI_SetBegin);
FNT_SetEnd : (SetEnd : FNI_SetEnd);
FNT_Text : (Text : FNI_Text);
FNT_Num : (Num : FNI_Num);
FNT_XBox : (XBox : FNI_Xbox);
FNT_Opt : (Opt : FNI_Opt);
FNT_Proc : (Proc : FNI_Proc);
FNT_Header : (Header : FNI_Header);
FNT_Button : (Button : FNI_Button);
FNT_RadioB : (RadioB : FNI_RadioB);
FNT_Hex : (Hex : FNI_Hex);
FNT_Float : (Float : FNI_Float);
FNT_TMask : (TMask : FNI_TMask);
FNT_NMask : (NMask : FNI_Nmask);
FNT_List : (List : FNI_List);
END;
PFormNode = ^TFormNode;
{-----------}
{ Form Type }
{-----------}
Type
TForm = Array[0..0] of TFormNode;
PForm = ^TForm;
TFormMax = Array[0..255] of TFormNode;
PFormMax = ^TFormMax;
{────────────────────────────────────────────────────────────────────────────}
{--------------------------}
{ Form draw/read functions }
{--------------------------}
Procedure WFormDrawNode( FM : PFormMax;
NodeNum : BYTE;
UseHigh : BOOLEAN );
Procedure WFormDraw( FM : PFormMax );
Procedure WFormRead( FM : PFormMax;
Var CurNode : BYTE;
Var RetCode : INTEGER );
{---------------------------------------}
{ Form allocation and control functions }
{---------------------------------------}
Procedure WFormZero( FormPtr : PFormmax;
NumNodes : WORD );
Procedure WFormPrepare( FM : PFormMax;
NumNodes : WORD );
Function WFormNew( NumNodes : WORD ) : PFormMax;
Procedure WFormDispose( FormPtr : PFormMax );
{-------------------------}
{ Form building functions }
{-------------------------}
Procedure WFormAddBegin( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
Fore1 : INTEGER;
Back1 : INTEGER;
HighFore : INTEGER;
HighBack : INTEGER;
Awake : BOOLEAN );
Procedure WFormAddEnd( FM : PFormMax );
Procedure WFormAddSetBegin( FM : PFormMax;
Awake : BOOLEAN;
Parent : BYTE );
Procedure WFormAddSetEnd( FM : PFormMax );
Procedure WFormAddText( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Len : BYTE;
S : ST80;
SPtr : POINTER );
Procedure WFormAddNum( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Len : BYTE;
Num : LONGINT );
Procedure WFormAddXBox( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Setting : BOOLEAN );
Procedure WFormAddButton( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
BType : BYTE;
ButtonStr : ST80;
ButtonPtr : POINTER;
RetCode : INTEGER );
Procedure WFormAddRadioB( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Setting : BOOLEAN );
Procedure WFormAddOpt( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
OptList : POINTER;
NumOpt : BYTE;
CurOpt : INTEGER );
Procedure WFormAddHex( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Len : BYTE;
Num : LONGINT );
Procedure WFormAddProc( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Proc : TFormNodeProc;
Width : BYTE;
Height : BYTE );
Procedure WFormAddFloat( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Float : REAL;
Width : BYTE;
Decimal : BYTE );
Procedure WFormAddTMask( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Mask : POINTER;
Keys : POINTER;
Fill : CHAR;
LJust : BOOLEAN;
TxtPtr : POINTER;
TxtStr : ST80 );
Procedure WFormAddNMask( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
Mask : POINTER;
MaskNum : LONGINT );
Procedure WFormAddListBox( FM : PFormMax;
X : INTEGER;
Y : INTEGER;
F : INTEGER;
B : INTEGER;
HF : INTEGER;
HB : INTEGER;
Key : BYTE;
ExtKey : BYTE;
Awake : BOOLEAN;
Parent : INTEGER;
List : POINTER;
ListNum : BYTE;
Cols : BYTE;
Rows : BYTE;
FrameStart : INTEGER;
ListCur : INTEGER;
ListKeys : ST80 );
{────────────────────────────────────────────────────────────────────────────}